﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Zimmerreservierung.Controller;
using Zimmerreservierung.Forms;
using Zimmerreservierung.Model;

namespace Zimmerreservierung
{
    public partial class Main : Form
    {

        private SQLiteConnection connection;

        private KundenController kundenController;
        private ZimmerController zimmerController;
        private ReservierungsController reservierungsController;

        private DataSet currentKundenDataSet;
        private DataSet currentZimmerDataSet;
        private BindingList<Reservierung> currentReservierungen;
        private BindingList<Reservierung> currentStornierungen;

        public Main()
        {
            InitializeComponent();
            tabControl1.DrawItem += new DrawItemEventHandler(tabControl1_DrawItem);
            connection = new SQLiteConnection(Properties.Settings.Default.dbConnectionString);

            kundenController = KundenController.getInstance();
            zimmerController = ZimmerController.getInstance();
            reservierungsController = ReservierungsController.getInstance();

            LoadKunden();
            LoadAutoCompleteTextKunde();
            LoadZimmer();
            LoadAutoCompleteTextZimmer();
            LoadReservierungen(false);
            LoadReservierungen(true);
            LoadRechnungen();
        }

        private void LoadRechnungen()
        {
            const string sql = "SELECT r.Id, k.name, r.Datum, r.Gesamtpreis, k.id FROM Rechnung r, Kunde k where r.KundenId = k.Id";
            try
            {
                connection.Open();

                DataSet ds = new DataSet();
                var da = new SQLiteDataAdapter(sql, connection);
                da.Fill(ds);

                dgvRechnungen.DataSource = ds.Tables[0].DefaultView;
                dgvRechnungen.Columns[0].HeaderText = "RechnungsNummer";
                dgvRechnungen.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgvRechnungen.Columns[1].HeaderText = "Kundenname";
                dgvRechnungen.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgvRechnungen.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgvRechnungen.Columns[2].HeaderText = "Rechnungsdatum";
                dgvRechnungen.Columns[3].HeaderText = "Gesamtpreis";
                dgvRechnungen.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgvRechnungen.Columns[4].Visible = false;

                dgvRechnungen.RowHeadersVisible = false;
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void LoadZimmer()
        {
            const string sql = "SELECT * FROM Zimmer ORDER BY Name";

            try
            {
                connection.Open();

                DataSet ds = new DataSet();
                var da = new SQLiteDataAdapter(sql, connection);
                da.Fill(ds);
                dgvZimmer.DataSource = ds.Tables[0].DefaultView;
                
                dgvZimmer.Columns[0].Visible = false;
                dgvZimmer.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgvZimmer.Columns[1].HeaderText = "Name";
                dgvZimmer.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[2].HeaderText = "Größe";
                dgvZimmer.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[3].HeaderText = "1E";
                dgvZimmer.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[4].HeaderText = "2E";
                dgvZimmer.Columns[5].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[5].HeaderText = "3E";
                dgvZimmer.Columns[6].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[6].HeaderText = "1E+1K";
                dgvZimmer.Columns[7].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[7].HeaderText = "1E+2K";
                dgvZimmer.Columns[8].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                dgvZimmer.Columns[8].HeaderText = "2E+1K";
                dgvZimmer.RowHeadersVisible = false;

                this.currentZimmerDataSet = ds;

                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void LoadKunden()
        {
            const string sql = "SELECT * FROM Kunde ORDER BY Name";

            try
            {
                connection.Open();

                DataSet ds = new DataSet();
                var da = new SQLiteDataAdapter(sql, connection);
                da.Fill(ds);
                kundenDataGridView.DataSource = ds.Tables[0].DefaultView;
                kundenDataGridView.Columns[0].Visible = false;
                kundenDataGridView.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                kundenDataGridView.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                kundenDataGridView.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                kundenDataGridView.Columns[4].Visible = false;                
                kundenDataGridView.Columns[5].Visible = false;                
                kundenDataGridView.Columns[6].Visible = false;
                kundenDataGridView.Columns[7].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                kundenDataGridView.Columns[8].Visible = false;
                kundenDataGridView.Columns[9].Visible = false;
                kundenDataGridView.RowHeadersVisible = false;

                this.currentKundenDataSet = ds;

                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            kundenDataGridView.Columns[0].Visible = false;
        }

        private void LoadReservierungen(bool storniert)
        {
            AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
            List<Reservierung> reservierungen = new List<Reservierung>();

            try 
            {
               reservierungen = reservierungsController.GetReservierungen(storniert);
             
                foreach(Reservierung r in reservierungen)
                    coll.Add(r.KundeName);
            }
            catch (Exception ex)
            {
              MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            var bindinglist = new BindingList<Reservierung>(reservierungen);
            var source = new BindingSource(bindinglist, null);
            
            if (!storniert)
            {
                dgvReservierung.DataSource = source;
                setReservierungsDataGridViewFormat(dgvReservierung);

                this.currentReservierungen = bindinglist;
                textBox4.AutoCompleteCustomSource = coll;
            }
            else
            {
                dgvStornierungen.DataSource = source;
                setReservierungsDataGridViewFormat(dgvStornierungen);
                dgvStornierungen.Columns[7].Visible = false;

                for(int i=0; i < dgvStornierungen.Rows.Count; i++)
                    dgvStornierungen.Rows[i].Cells[6].Value = Convert.ToDouble(dgvStornierungen.Rows[i].Cells[6].Value) * 0.10;

                this.currentStornierungen = bindinglist;
                textBox3.AutoCompleteCustomSource = coll;

            }
        }

        private void setReservierungsDataGridViewFormat(DataGridView dgv)
        {
            for(int i=0; i < dgv.Columns.Count; i++)
                dgv.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            dgv.Columns[0].Visible = false;
            for(int i=8; i <= 12; i++)
                dgv.Columns[i].Visible = false;

            dgv.Columns[3].HeaderText = "Kunde";
            dgv.Columns[4].HeaderText = "Zimmer";
            dgv.Columns[5].HeaderText = "Preisart";
            dgv.Columns[6].HeaderText = "Kosten (€)";
            dgv.Columns[7].HeaderText = "Frühzeitige Abreise";
            dgv.RowHeadersVisible = false;
            dgv.MultiSelect = true;
        }

        private void tabControl1_DrawItem(Object sender, System.Windows.Forms.DrawItemEventArgs e)
        {
            Graphics g = e.Graphics;
            Brush _textBrush;

            // Get the item from the collection.
            TabPage _tabPage = tabControl1.TabPages[e.Index];

            // Get the real bounds for the tab rectangle.
            Rectangle _tabBounds = tabControl1.GetTabRect(e.Index);

            if (e.State == DrawItemState.Selected)
            {

                // Draw a different background color, and don't paint a focus rectangle.
                _textBrush = new SolidBrush(Color.Red);
                g.FillRectangle(Brushes.Gray, e.Bounds);
            }
            else
            {
                _textBrush = new System.Drawing.SolidBrush(e.ForeColor);
                e.DrawBackground();
            }

            // Use our own font.
            Font _tabFont = new Font("Arial", (float)10.0, FontStyle.Bold, GraphicsUnit.Pixel);

            // Draw string. Center the text.
            StringFormat _stringFlags = new StringFormat();
            _stringFlags.Alignment = StringAlignment.Center;
            _stringFlags.LineAlignment = StringAlignment.Center;
            g.DrawString(_tabPage.Text, _tabFont, _textBrush, _tabBounds, new StringFormat(_stringFlags));
        }


        // delete kunde
        private void button1_Click(object sender, EventArgs e)
        {
            if (kundenDataGridView.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Wollen sie diesen Kunden wirklich löschen?", "Kunde löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                {
                    try
                    {
                        int id = Convert.ToInt32(kundenDataGridView.SelectedRows[0].Cells[0].Value);
                        kundenController.RemoveKunde(id);
                        LoadKunden();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("Sie müssen einen Kunden selektieren um ihn zu löschen", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //neue reservierung - kundenformular
            if (kundenDataGridView.SelectedRows.Count > 0)
            {
                DataGridViewRow selectedRow = kundenDataGridView.SelectedRows[0];
                int rowNumber = selectedRow.Index;

                Reservierung reservierung = new Reservierung
                {
                    Kunde = new Kunde
                    {
                        Id = int.Parse(selectedRow.Cells[0].Value.ToString())
                    }
                }; 
                
                FormReservierungNeu form = new FormReservierungNeu(reservierung);
                form.ShowDialog();
                if (form.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh grid#
                    LoadReservierungen(false);
                    tabControl1.SelectedIndex = 2;
                }
            }
            else
            {
                MessageBox.Show("Sie müssen einen Kunden selektieren um eine Reservierung zu machen", "Warnung", MessageBoxButtons.OK);
            }
        }

        // neuer kunde anlegen
        private void button4_Click(object sender, EventArgs e)
        {
            FormKundeNeu neuerKunde = new FormKundeNeu();
            neuerKunde.ShowDialog();
            if (neuerKunde.DialogResult!= System.Windows.Forms.DialogResult.Cancel)
            {
                // refresh grid#
                LoadKunden();
            }
        }

        private void DeleteZimmer(int id)
        {
            try
            {

                connection.Open();
                using (SQLiteCommand command = new SQLiteCommand(connection))
                {
                    command.CommandText = "DELETE FROM Zimmer WHERE ID = " + id;
                    command.ExecuteNonQuery();
                }
                connection.Close();
                this.LoadZimmer();              

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            // details / bearbeiten kunde
            if (kundenDataGridView.SelectedRows.Count > 0)
            {
                DataGridViewRow selectedRow = kundenDataGridView.SelectedRows[0];
                int rowNumber = selectedRow.Index;

                int id = int.Parse(selectedRow.Cells[0].Value.ToString());
                FormKundeBearbeiten kundeBearbeiten = new FormKundeBearbeiten(id);
                kundeBearbeiten.ShowDialog();

                if (kundeBearbeiten.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh grid#
                    LoadKunden();
                    kundenDataGridView.Rows[rowNumber].Selected = true;
                }                
            }
            else
            {
                MessageBox.Show("Sie müssen einen Kunden selektieren um ihn zu bearbeiten", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            // delete zimmer
            if (this.dgvZimmer.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Wollen sie dieses Zimmer wirklich löschen?", "Zimmer löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                {
                    DeleteZimmer(Convert.ToInt32(dgvZimmer.SelectedRows[0].Cells[0].Value));
                }
            }
            else
            {
                MessageBox.Show("Sie müssen ein Zimmer selektieren um es zu löschen", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            FormZimmerNeu neuesZimmer = new FormZimmerNeu(connection);
            neuesZimmer.ShowDialog();
            if (neuesZimmer.DialogResult != System.Windows.Forms.DialogResult.Cancel)
            {
                // refresh grid#
                LoadZimmer();
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            // zimmer bearbeiten
            if (dgvZimmer.SelectedRows.Count > 0)
            {
                DataGridViewRow selectedRow = dgvZimmer.SelectedRows[0];
                int rowNumber = selectedRow.Index;
                Zimmer zimmer = new Zimmer();
                zimmer.Id = int.Parse(selectedRow.Cells[0].Value.ToString());
                zimmer.Name = selectedRow.Cells[1].Value.ToString();
                zimmer.Belegzahl = int.Parse(selectedRow.Cells[2].Value.ToString());
                string erw = selectedRow.Cells[3].Value.ToString();
                if (!string.IsNullOrEmpty(erw))
                {
                    zimmer.Erwachsener = double.Parse(erw);
                }
                string zweiErw = selectedRow.Cells[4].Value.ToString();
                if (!string.IsNullOrEmpty(zweiErw))
                {
                    zimmer.ZweiErwachsene = double.Parse(zweiErw);
                }
                string dreiErw = selectedRow.Cells[5].Value.ToString();
                if (!string.IsNullOrEmpty(dreiErw))
                {
                    zimmer.DreiErwachsene = double.Parse(dreiErw);
                }
                string erwKind = selectedRow.Cells[6].Value.ToString();
                if (!string.IsNullOrEmpty(erwKind))
                {
                    zimmer.ErwachsenerKind = double.Parse(erwKind);
                }
                string erw2Kind = selectedRow.Cells[7].Value.ToString();
                if (!string.IsNullOrEmpty(erw2Kind))
                {
                    zimmer.ErwachsenerZweiKinder = double.Parse(erw2Kind);
                }
                string zweiErwKind = selectedRow.Cells[8].Value.ToString();
                if (!string.IsNullOrEmpty(zweiErwKind))
                {
                    zimmer.ZweiErwachseneKind = double.Parse(zweiErwKind);
                }

                FormZimmerBearbeiten zimmerBearbeiten = new FormZimmerBearbeiten(connection, zimmer);
                zimmerBearbeiten.ShowDialog();
                if (zimmerBearbeiten.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh grid#
                    LoadZimmer();
                    dgvZimmer.Rows[rowNumber].Selected = true;
                }
            }
            else
            {
                MessageBox.Show("Sie müssen ein Zimmer selektieren um ihn zu bearbeiten", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            //neue reservierung
            FormReservierungNeu form = new FormReservierungNeu(new Reservierung());
            form.ShowDialog();
            if (form.DialogResult != System.Windows.Forms.DialogResult.Cancel)
            {
                // refresh grid#
                LoadReservierungen(false);
            }
        }

        private void button15_Click(object sender, EventArgs e)
        {
            //nicht sinnvoll

            //reservierung bearbeiten
           /* if (dgvReservierung.SelectedRows.Count > 0)
            {
                DataGridViewRow selectedRow = dgvReservierung.SelectedRows[0];
                int rowNumber = selectedRow.Index;

                int id = int.Parse(selectedRow.Cells[0].Value.ToString());
                FormReservierungBearbeiten form = new FormReservierungBearbeiten(new Reservierung());
                form.ShowDialog();
                if (form.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh grid#
                    LoadReservierungen(false);
                    dgvReservierung.Rows[rowNumber].Selected = true;
                }
            }
            else
            {
                MessageBox.Show("Sie müssen eine Reservierung selektieren um diese zu bearbeiten", "Warnung", MessageBoxButtons.OK);
            }*/
        }

        private void button13_Click(object sender, EventArgs e)
        {
            // reservierung stornieren
            if (dgvReservierung.SelectedRows.Count > 0)
            {
                DataGridViewRow selectedRow = dgvReservierung.SelectedRows[0];
                int id = int.Parse(selectedRow.Cells[0].Value.ToString());
                double stornierungsKosten = reservierungsController.GetStornierungskosten(id);

                if (MessageBox.Show("Wollen sie diese Reservierung wirklich stornieren?\nDie Stornierung kostet 10% = " + stornierungsKosten + " €", "Reservierung stornieren", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                {
                    StorniereReservierung(Convert.ToInt32(dgvReservierung.SelectedRows[0].Cells[0].Value));
                    LoadReservierungen(true);
                }
            }
            else
            {
                MessageBox.Show("Sie müssen eine Reservierung selektieren um diese zu stornieren", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            //fruehzeitigeAbreise
            if (dgvReservierung.SelectedRows.Count > 0)
            { 
                DataGridViewRow selectedRow = dgvReservierung.SelectedRows[0];
                int id = int.Parse(selectedRow.Cells[0].Value.ToString());

                FormReservierungFruehzeitigeAbreise form = new FormReservierungFruehzeitigeAbreise(id);
                form.ShowDialog();
                if (form.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh grid#
                    LoadReservierungen(false);
                }
            }
            else
            {
                MessageBox.Show("Sie müssen eine Reservierung selektieren um diese zu stornieren", "Warnung", MessageBoxButtons.OK);
            }
        }

        private void StorniereReservierung(int id)
        {
            try
            {
                reservierungsController.Stornieren(id);
                LoadReservierungen(false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tabControl1_Selected(object sender, TabControlEventArgs e)
        {
           if(e.TabPage == tabPage5)
               Application.Exit();     
        }

        private void button16_Click(object sender, EventArgs e)
        {
            // rechnung erstellen aus reservierung
            if (dgvReservierung.SelectedCells.Count < 1)
            {
                MessageBox.Show("Sie müssen eine Reservierung selektieren um eine Rechnung zu erstellen", "Warnung", MessageBoxButtons.OK);
                return;
            }

            List<Reservierung> reservierungen = new List<Reservierung>();
            int i = 0;
            foreach (DataGridViewRow res in dgvReservierung.SelectedRows)
            {
                i++;
                Reservierung reservierung = new Reservierung();
                reservierung.Id = Convert.ToInt32(res.Cells[0].Value);
                reservierung.Startdatum = Convert.ToDateTime(res.Cells[1].Value);
                reservierung.Enddatum = Convert.ToDateTime(res.Cells[2].Value);
                reservierung.KundeName = res.Cells[3].Value.ToString();
                reservierung.ZimmerName = res.Cells[4].Value.ToString();
                reservierung.Zimmerpreisart = res.Cells[5].Value.ToString();
                reservierung.Zimmerpreis = Convert.ToDouble(res.Cells[6].Value);
                reservierung.FruehzeitigesEnddatum = Convert.ToDateTime(res.Cells[7].Value);
                reservierung.Kunde = res.Cells[8].Value as Kunde;
                reservierung.Zimmer = res.Cells[9].Value as Zimmer;

                reservierung.Rechnung = res.Cells[10].Value as Rechnung;
                if (reservierung.Rechnung != null && reservierung.Rechnung.Id != -1)
                {
                    MessageBox.Show("Rechnung für " + i + ". Reservierung bereits erstellt. ", "Rechnung existiert bereits", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    continue;

                }
                reservierung.Rabatt = Convert.ToInt32(res.Cells[11].Value);
                reservierung.Storniert = Convert.ToBoolean(res.Cells[12].Value);
                reservierungen.Add(reservierung);
                
            }

            if (reservierungen.Count > 0)
            {
                FormRechnung rechnungForm = new FormRechnung(reservierungen, connection);
                rechnungForm.ShowDialog();
                if (rechnungForm.DialogResult != System.Windows.Forms.DialogResult.Cancel)
                {
                    // refresh rechnungs grid
                    LoadRechnungen();
                    LoadReservierungen(false);
                    LoadReservierungen(true);
                }
            }
        }

        private void button10_Click(object sender, EventArgs e)
        {
            // rechnung erstellen aus stornierung aus
            if (this.dgvStornierungen.SelectedCells.Count < 1)
            {
                MessageBox.Show("Sie müssen eine Stornierung selektieren um eine Rechnung zu erstellen", "Warnung", MessageBoxButtons.OK);
                return;
            }

            DataGridViewRow res = dgvStornierungen.SelectedRows[0];


            Reservierung reservierung = new Reservierung();
            reservierung.Id = Convert.ToInt32(res.Cells[0].Value);
            reservierung.Startdatum = Convert.ToDateTime(res.Cells[1].Value);
            reservierung.Enddatum = Convert.ToDateTime(res.Cells[2].Value);
            reservierung.KundeName = res.Cells[3].Value.ToString();
            reservierung.ZimmerName = res.Cells[4].Value.ToString();
            reservierung.Zimmerpreisart = res.Cells[5].Value.ToString();
            reservierung.Zimmerpreis = Convert.ToDouble(res.Cells[6].Value);
            reservierung.FruehzeitigesEnddatum = Convert.ToDateTime(res.Cells[7].Value);
            reservierung.Kunde = res.Cells[8].Value as Kunde;
            reservierung.Zimmer = res.Cells[9].Value as Zimmer;

            reservierung.Rechnung = res.Cells[10].Value as Rechnung;
            if (reservierung.Rechnung != null && reservierung.Rechnung.Id != -1)
            {
                MessageBox.Show("Rechnung für Stornierung bereits erstellt. ", "Rechnung existiert bereits", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;

            }
            reservierung.Rabatt = Convert.ToInt32(res.Cells[11].Value);
            reservierung.Storniert = Convert.ToBoolean(res.Cells[12].Value);

            List<Reservierung> reservierungen = new List<Reservierung>();
            reservierungen.Add(reservierung);

            FormRechnung rechnungForm = new FormRechnung(reservierungen, connection);
            rechnungForm.ShowDialog();
            if (rechnungForm.DialogResult != System.Windows.Forms.DialogResult.Cancel)
            {
                // refresh rechnungs grid
                LoadRechnungen();
                LoadReservierungen(false);
                LoadReservierungen(true);
            }
        }

        private void LoadAutoCompleteTextKunde()
        {
            AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
            DataTable dt = currentKundenDataSet.Tables[0];

            foreach (DataRow dr in dt.Rows)
            {
                coll.Add(Convert.ToString(dr["Name"]));
            }

            textBox1.AutoCompleteCustomSource = coll;
        }

        private void LoadAutoCompleteTextZimmer()
        {
            AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
            DataTable dt = currentZimmerDataSet.Tables[0];

            foreach (DataRow dr in dt.Rows)
            {
                coll.Add(Convert.ToString(dr["Name"]));
            }

            textBox2.AutoCompleteCustomSource = coll;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            //Suche Kunde
            DataView view = currentKundenDataSet.Tables[0].DefaultView;
            view.RowFilter = string.Format("Name LIKE '{0}%'", textBox1.Text);
            kundenDataGridView.DataSource = view;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            //Suche Zimmer
            DataView view = currentZimmerDataSet.Tables[0].DefaultView;
            view.RowFilter = string.Format("Name LIKE '{0}%'", textBox2.Text);
            dgvZimmer.DataSource = view;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            //Suche Reservierung
            BindingList<Reservierung> filtered = new BindingList<Reservierung>(currentReservierungen.Where(obj => obj.KundeName.ToLower().StartsWith(textBox4.Text.ToLower())).ToList());
            dgvReservierung.DataSource = filtered;
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            //Suche Stornierung
            BindingList<Reservierung> filtered = new BindingList<Reservierung>(currentStornierungen.Where(obj => obj.KundeName.ToLower().StartsWith(textBox3.Text.ToLower())).ToList());
            dgvStornierungen.DataSource = filtered;
        }

        private void btPrint_Click(object sender, EventArgs e)
        {
            // Rechnung Drucken
            if (dgvRechnungen.SelectedRows.Count < 1)
            {
                MessageBox.Show("Sie müssen eine Rechnung selektieren um sie anzuzeigen", "Warnung", MessageBoxButtons.OK);
                return;
            }
            else
            {
                int rId = int.Parse(dgvRechnungen.SelectedRows[0].Cells[0].Value.ToString());
                FormRechnungDetails rechnungForm = new FormRechnungDetails(rId);
                rechnungForm.ShowDialog();
            }
                        
        }
    }
}
